package find.the.repeat.number.two;

import java.util.HashSet;
import java.util.Set;

/**
 * @Time 2019/12/27
 * @author 王光浩
 * @Need 给出一个整型数组以及一个整数k，在数组中寻找出下标差最小，且对应元素值相等的i、j，判断|i-j|是否大于k，如果大于
 *       返回false，否则返回true。
 * @Method 使用HashSet+滑动窗口。滑动窗口的大小为k，在滑动窗口后面的数据舍弃，比较滑动窗口内部的数据，如果
 *         不存在重复则返回移动滑动窗口，如果移动到最后仍然没有则返回false，否则返回true。
 *         从表现的结果来看使用Set集合的效率比使用HashMap效率高的多。
 */
public class OtherMethod {
	 public boolean containsNearbyDuplicate(int[] nums, int k) {
		 Set<Integer> set=new HashSet<Integer>();
		 int len=nums.length;
		 //遍历数组
		 for(int i=0;i<len;i++) {
			 if(set.contains(nums[i]))return true;
			 set.add(nums[i]);
			 //控制滑动窗口的大小
			 if(set.size()>k)
				 set.remove(nums[i-k]);
		 }
		 return false;
	 }
}
